import torch
import numpy as np


def setup_test():
    x = torch.rand(5, 3)
    y = torch.rand(size=[2, 2])  # *好像是python函数中字典参数
    print(x)
    print(y)  # 我们应该关注pytorch中关于数值类型的表示，但是这都是对于python原生数据类型的封装，比如java中的BigDecimal


def torch_type():
    x = torch.ones((3, 5), dtype=torch.double)
    print(x)

    x1 = torch.randn_like(x, dtype=torch.float)

    print(x)
    print(x1.size())  # 提示一个self， 就是实例方法
    print(x1)


def torch_tensor():
    x = torch.tensor([23, 3243.5], dtype=torch.float64)  # 64是，普通float是32，这个就类似于double
    print(x)

    y = torch.tensor([434, 4, 4, 3.4], dtype=torch.double)  # 在torch中，float64就是double
    print(y)


def torch_ops():
    # torch中关于tensor的计算，这个也是一个框架应该具备的基本功能
    x = torch.rand((3, 5), dtype=torch.double)
    print(x)
    y = np.random.random((3, 5))  # module is not callable,不来不熟悉这个

    print(y)
    y = torch.from_numpy(y)
    y.type(torch.double)  # 需要类型转换一下，尴尬

    # print(x+ y) # 这个实际上是调用的__add__方法，这个是特殊的方法

    z = torch.empty_like(x)
    torch.add(x, y, out=z)
    print(z)

    x2 = torch.tensor([[4, 4], [5, 5]])
    x3 = torch.tensor([[3, 4, 4], [4, 54, 4]])  # 点积运算
    z3 = torch.mul(x2, x3)
    print(z3)


def operations():
    x = torch.rand(5, 3)
    y = torch.rand(5, 3)
    z = x + y
    print(z)

    y.add


def np_api():
    # 随机生成数，在测试时很好用
    x = np.random.randint(0, 100, (3, 5))  # dtype=torch.float64,type not understand
    print(x)

# torch_type()
# torch_tensor()
# torch_ops()
# operations()




np_api()
